2023/12/231025字符

V8 引擎

执行 JS 过程

  • 预解析
    • 检查语法错误,如果有,结束
  • 生成 AST 语法树
    • 语法分析,生成抽象语法树,AST 为每一行代码定义键值对。初始类型标识符定义 AST 属于一个程序,然后所有代码行将定义在主体内部,主体是一个对象数组。
  • 生成字节码
    • 基线编译器(Ignition)将 AST 转换为字节码
  • 生成机器代码
    • 优化编译器 (Turbofan) 将字节码转换为优化的机器代码。另外,在逐行执行字节码的过程中,如果一段代码经常被执行,V8会直接将这段代码转换并保存为机器码,下次执行不需要经过字节码,优化了执行速度

垃圾回收机制

  1. 标记清除:对变量进行标记,进行清除(如果变量存在引用关系,就不会被回收)
    • 进入函数,变量标记为进入状态,函数执行技术变量标记为结束状态
  2. 引用计数:记录对象的引用次数,当次数为 0 时将其释放掉。